#!/bin/sh /etc/rc.common
# Copyright (C) 2015 OpenWrt.org

START=90
STOP=10

USE_PROCD=1
PROG=/usr/sbin/freshclam
FRESHCLAM_CONFIGFILE="/tmp/clamav/freshclam.conf"

validate_freshclam_section() {
	uci_load_validate freshclam freshclam "$1" "$2" \
		'freshclam_config_file:string' \
		'UpdateLogFile:string' \
		'DatabaseMirror:string' \
		'NotifyClamd:string' \
		'DatabaseOwner:string' \
		'CompressLocalDatabase:string' \
		'DatabaseDirectory:string:'
}

start_freshclam_instance() {
	[ "$2" = 0 ] || {
		echo "validation failed"
		return 1
	}

	[ -f /tmp/freshclam.pid ] && echo "already running" && return 0

	mkdir -p "$DatabaseDirectory"
	mkdir -p /etc/clamav
	touch /tmp/freshclam.log
	touch /tmp/freshclam.pid

	mkdir -p "$(dirname $FRESHCLAM_CONFIGFILE)"
	ln -sf "$freshclam_config_file" "$FRESHCLAM_CONFIGFILE"

	{
	echo "UpdateLogFile " "$UpdateLogFile"
	echo "DatabaseMirror " "$DatabaseMirror"
	echo "NotifyClamd " "$NotifyClamd"
	echo "DatabaseOwner " "$DatabaseOwner"
	echo "CompressLocalDatabase " "$CompressLocalDatabase"
	echo "DatabaseDirectory " "$DatabaseDirectory"
	} > "$FRESHCLAM_CONFIGFILE"

	procd_open_instance
	procd_set_param command $PROG -d --config-file=$FRESHCLAM_CONFIGFILE -p /tmp/freshclam.pid --no-warnings
	procd_set_param file $FRESHCLAM_CONFIGFILE
	procd_close_instance
}

start_service()
{
	validate_freshclam_section freshclam start_freshclam_instance
}

stop_service()
{
	[ ! -f /tmp/freshclam.pid ] && echo "not running" && return 0
	PID=$(cat /tmp/freshclam.pid)
	kill "$PID"
	rm -f /tmp/freshclam.pid
}

service_triggers()
{
	procd_add_reload_trigger "freshclam"
	procd_add_validation validate_freshclam_section
}
